package com.interview.a_多线程.h_多线程问题.a_累加结果出错_计数错误;

/**
 * 多线程 累加
 * 计数错误
 * <p>
 * 线程1 线程2 并不知道对方的存在
 * <p>
 * a=1
 * 线程1 线程2 同时执行 a++
 * 1执行 a++ 刚计算好结果是2 还没来得及赋值
 * 被2执行 a++ 计算并赋值a=2
 * <p>
 * 此时线程1开始赋值 a=2
 * 所以结果是 2 不是 3
 */
public class Test {
    public static void main(String[] args) throws InterruptedException {
        ThreadAdd add = new ThreadAdd();

        Thread thread1 = new Thread(add);
        thread1.start();

        Thread thread2 = new Thread(add);
        thread2.start();


        //        主线程 等待 子线程完成

        thread1.join();
        thread2.join();

        //
        System.out.println("count1=0  累加1 两万次之后 = " + add.count1);
        System.out.println("count2=0  累加1 两万次之后 = " + add.count2);
    }
}

class ThreadAdd implements Runnable {
    public int count1 = 0;
    public int count2 = 0;

    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            count1++;
        }
        synchronized (this) {
            for (int i = 0; i < 10000; i++) {
                count2++;
            }
        }

    }
}
